package com.demo.java.OD501_550.OD524;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最大社交距离(B卷-200分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146486162
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int seat_num = in.nextInt(); // 座位数量
        in.nextLine(); // 读取换行符
        String seat_str = in.nextLine(); // 座位状态字符串
        String[] seats = seat_str.substring(1, seat_str.length() - 1).split(","); // 解析座位状态
        int[] seat_status = new int[seats.length];

        // 将座位状态从字符串转换为整数
        for (int i = 0; i < seats.length; i++) {
            seat_status[i] = Integer.parseInt(seats[i]);
        }

        // 输出结果：每个进会的员工选择的座位
        System.out.print(get_distance(seat_num, seat_status));
    }

    // 计算员工进会议时选择的座位
    public static int get_distance(int seat_num, int[] seat_status) {
        TreeSet<Integer> taken_seats = new TreeSet<>(); // 存储已占用的座位

        // 遍历每个员工的进出操作
        for (int i = 0; i < seat_status.length; i++) {
            int op = seat_status[i]; // 当前操作，1表示进会，负值表示离开

            if (op > 0) { // 进会操作
                if (taken_seats.size() == 0) { // 第一个员工进来
                    if (i == seat_status.length - 1) {
                        return 0; // 如果是最后一个员工，返回座位0
                    }
                    taken_seats.add(0); // 默认选择座位0
                } else if (taken_seats.size() == 1) { // 第二个员工进来
                    taken_seats.add(seat_num - 1); // 选择最大编号的座位
                    if (i == seat_status.length - 1) {
                        return seat_num - 1; // 返回最大座位编号
                    }
                } else if (taken_seats.size() > 1 && taken_seats.size() < seat_num) { // 更多员工进来
                    int[] ints = new int[taken_seats.size()];
                    int count = 0;
                    // 将已占用座位的编号保存到数组中
                    for (Integer taken_seat : taken_seats) {
                        ints[count++] = taken_seat;
                    }

                    int max_len = 0;
                    int start = 0;

                    // 查找最大空隙的位置
                    for (int j = 0; j < ints.length - 1; j++) {
                        int len = ints[j + 1] - ints[j];
                        if (len / 2 > max_len) {
                            max_len = len / 2;
                            start = ints[j];
                        }
                    }

                    taken_seats.add(start + max_len); // 添加选择的座位
                    if (i == seat_status.length - 1) {
                        return start + max_len; // 返回选择的座位编号
                    }
                } else {
                    return -1; // 如果没有空座位，返回-1
                }
            } else { // 离开操作
                taken_seats.remove(-op); // 将离开的座位标记为空闲
            }
        }
        return 0; // 如果所有员工都进会，则返回0
    }
}